package controller;

import domain.Admin;
import domain.Work;
import service.AdminService;
import service.RegisterService;
import service.WorkService;
import service.impl.AdminServiceImpl;
import service.impl.WorkServiceImpl;
import ui.AdminUI;
import ui.WorkUI;
import util.CheckUtil;
import util.InputUtil;
import util.PrintUtil;
import util.SessionUtil;

import java.util.List;

public final class AdminController {
    private AdminController() {
    }
    private static final AdminService adminService = AdminServiceImpl.getINSTANCE();
    private static final WorkService workService = WorkServiceImpl.getINSTANCE();
    private static final RegisterService registerService = AdminServiceImpl.getINSTANCE();

    /**
     * 平台入口
     */
    public static void run() {
        /*
         * 平台入口
         * 1、登录
         * 0、退出平台
         */
        while (true){
            AdminUI.entry();
            int option = InputUtil.getInputInteger("请输入您的选项：",0,1);
            if(option==1) login();
            else return;
        }
    }

    /**
     * 登录
     */
    public static void login() {
        /*
         * 平台人员登录
         * 1、输入手机号
         * 2、判断手机号，格式错误（请重新输入），格式正确继续
         * 3、输入密码
         * 4、判断密码是否正确，登录失败退出平台，密码正确登录成功
         * 5、index() 进行接下来操作
         */
        PrintUtil.printLine();
        PrintUtil.printString("平台登录");
        PrintUtil.printLine();

        String tel=InputUtil.getInputText("请输入登录手机号");
        while (!CheckUtil.checkTel(tel)) {
            System.out.println("输入的手机号格式错误!");
            tel = InputUtil.getInputText("请重新输入:");
        }
        String pw = InputUtil.getInputText("请输入密码：");
        Admin admin = adminService.login(tel,pw);
        if (admin == null) {
            PrintUtil.printString("密码输入错误，请重新登录：");
            return;
        }
        PrintUtil.printString("登陆成功！");
        SessionUtil.setAdmin(admin);
        index();
    }

    /**
     * 登录后平台首页
     */
    private static void index() {
        /*
         * 平台首页
         * 1、平台人员管理 adminManage();
         * 2、工作审核 workManage();
         * 3、个人信息 AdminUI.personInformation();
         * 0、退出登录
         */
        Admin admin = SessionUtil.getAdmin();
        while (true){
            AdminUI.index();
            int option = InputUtil.getInputInteger("请输入您的选项：",0,3);
            switch (option){
                case 1:
                    workManage();
                    break;
                case 2:
                    adminManage();
                    break;
                case 3:
                    AdminUI.personInformation(admin);
                    break;
                case 0:
                    SessionUtil.setAdmin(null);
                    PrintUtil.printString("退出成功！");
                    return;
            }
        }
    }

    /**
     * 平台人员管理界面
     */
    public static void adminManage() {
        /*
         * 平台人员管理界面
         * 1、增加管理员
         * 0、返回上级
         */
        while (true){
            AdminUI.adminManage();
            int option = InputUtil.getInputInteger("请输入您的选项：",0,1);
            switch (option){
                case 1:
                    addAdmin();
                    break;
                case 0:
                    return;
            }
        }
    }

    /**
     * 增加管理员
     */
    public static void addAdmin() {
        /*
         * 增加管理员
         * 1、调用RegisterController.getTel(registerService)获取输入手机号并且验证手机号
         * 2、调用RegisterController.getPassword()获取输入密码并且进行验证
         * 3、输入名称
         * 4、输入性别
         * 5、设置权限为1
         * 6、调用adminService.addAdmin()来判断是否添加成功，成功输出注册成功，失败输出注册失败请重新注册
         */
        Admin admin = new Admin();
        PrintUtil.printLine();
        PrintUtil.printString("添加管理员");
        PrintUtil.printLine();
        admin.setTel(RegisterController.getTel(registerService));
        admin.setPassword(RegisterController.getPassword());
        admin.setName(RegisterController.getName(registerService));
        admin.setSex(InputUtil.getInputInteger("请输入性别(男:0 女:1):", 0, 1));
        admin.setAuthority(1);

        //
        if (adminService.addAdmin(admin) > 0) {
            PrintUtil.printString("注册成功！");
        } else {
            PrintUtil.printString("注册失败，请重试！");
        }
    }

    /**
     * 工作审核
     */
    public static void workManage() {
        /*
         * 显示所有待审核工作
         * List<Work> works = workService.selectAll();
         * AdminUI.showAdminWorkList(works);
         * 1、输入工作编号，编号为0时返回，输入在范围内的编号，获取选中的工作调用Work work = work.get();
         * 2、显示工作详细信息调用WorkUI.showAdminWorkDetail(work);
         * 3、显示管理员审核操作调用WorkUI.showAdminOperator();
         * 4、根据输入判断是否通过审核，输入为1调用workService.onWork(work)将work状态设置为已通过并且输出工作通过审核，输入为0则不需要操作，输出为工作未通过审核并返回
         */
        PrintUtil.printLine();
        List<Work> works = workService.selectByPassState(0);
        PrintUtil.printString("当前未审核工作：");
        PrintUtil.printLine();
        WorkUI.showWorkList(works);
        int check = InputUtil.getInputInteger("请输入待审核的工作编号：", 0, works.size());
        if(check == 0) return;
        Work work = works.get(check - 1);
        while(true){
            WorkUI.showDetailWork(work);
            AdminUI.showAdminOperator();
            switch (InputUtil.getInputInteger("请输入审核结果(通过:1 驳回:2):", 0,2)) {
                case 1:
                    if(workService.onWork(work) == 1) {
                        PrintUtil.printString("工作通过审核");
                    }else PrintUtil.printString("工作审核失败");
                    return;
                case 2:
                case 0:
                    return;
            }
        }
    }
}
